package com.projles.release1.database;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.projles.release1.licoes.Instrumento;
import com.projles.release1.licoes.Licao;
import com.projles.release1.licoes.Nota;
import com.projles.util.Gravacao;

public class Jogador implements Serializable {

	private static final long serialVersionUID = 7667314124989443245L;

	private String nome;
	
	// antigo - mudar
	private Map<String, Double> licoesFeitas;   // Arnett - Isso sai pq licao eh q tem a informacao de id da licao eh a propria licao
	
	
	// novo
	private List<Licao> licoesJogador;    // lista de liscoes... (liberadas e bloqueadas)
	
	private List<Gravacao> toquesGravados;   // lista de sons gravados no modo multiplay
	

	public Jogador(String nome) {
		this.nome = nome;
		this.licoesFeitas = new HashMap<String, Double>();
		
		licoesJogador = new ArrayList<Licao>();
		toquesGravados = new ArrayList<Gravacao>();
		
		
		////---> para testes - licao de teste
		ArrayList<Nota> listaNotasTeste = new ArrayList<Nota>();
		
		listaNotasTeste.add(new Nota(2, Instrumento.SURDO));
		listaNotasTeste.add(new Nota(4, Instrumento.CAIXA));
		listaNotasTeste.add(new Nota(6, Instrumento.SURDO));
		listaNotasTeste.add(new Nota(8, Instrumento.CAIXA));
		listaNotasTeste.add(new Nota(10, Instrumento.SURDO));
		listaNotasTeste.add(new Nota(12, Instrumento.CAIXA));
		listaNotasTeste.add(new Nota(14, Instrumento.PRATO_ATAQUE));
		
        Licao l = new Licao(listaNotasTeste, "iniciante 1");
        addLicao(l);
        ////---> fim do teste
        
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	@Override
	public String toString() {
		return this.nome;
	}

	public void setLicoes(List<Licao> licoes) {
		licoesJogador = licoes;
	}
	
	public void addLicao(Licao umaLicao) {
		licoesJogador.add(umaLicao);
	}
	
	public List<Licao> getLicoes() {
		return licoesJogador;
	}

	public Licao getLicao(String identificador) {
		
		for(Licao l : licoesJogador) {
			if (l.getIdentificador().equals(identificador)) {
				return l;
			}
		}
		
		return null;
	}
	
	public List<Gravacao> getGravacoes() {
		return toquesGravados;
	}
	
	public void addGravacao(Gravacao sonsGravados) {
		toquesGravados.add(sonsGravados);
	}
	

	/// TODO - tirar isso abaixo - old
	
	/**
	 * Seta a porcentagem acertada pelo jogador na licao
	 * @param licao
	 * @param porcentagem
	 */
	public void setStatus(String idLicao, double porcentagem) {
		licoesFeitas.put(idLicao, porcentagem);
	}

	/**
	 * Retorna a porcentagem feita da licao passada como parametro
	 * @param licao
	 * @return
	 */
	public Double getStatus(String idLicao) {
		try {
			System.out.println(licoesFeitas);
			return licoesFeitas.get(idLicao);
		} catch (Exception e) {
			return null;
		}
	}
}
